#include <iostream>

using namespace std;

/*
 * 子类与父类有同名属性与函数
 *      访问子类同名成员    直接访问
 *      访问父类同名成员    需要加作用域
 *
 *      静态成员变量和静态成员函数调用方法类似，但静态成员可以通过类名来调用
 *          即   Son::m_a            通过类名调用子类中静态变量
 *               Son::Base::m_a      通过类名调用父类中静态变量
 */

class Base
{
public:
    int m_a;
    Base()
    {
        m_a = 100;
    }

    void func()
    {
        cout << "Base func" << endl;
    }

    void func(int a)
    {
        cout << "Base func(int a)" << endl;
    }
};

class Son: public Base
{
public:
    int m_a;
    Son()
    {
        m_a = 200;
    }

    void func()
    {
        cout << "Son func" << endl;
    }
};

void test1()
{
    Son s;
    cout << "Son m_a=" << s.m_a << endl;
    cout << "Base m_a=" << s.Base::m_a << endl;
}

void test2()
{
    Son s;
    s.func();

    s.Base::func();

    // 如果子类中出现和父类同名的成员函数，子类的同名成员函数会隐藏掉父类中所有的同名成员函数，如果想访问父类中被隐藏的同名成员函数，需要加作用域
//    s.func(2);
    s.Base::func(1);
}

int main() {

    test1();

    test2();

    return 0;
}
